"""
通过某个字段将记录分组

问题：
    你有一个字典或者实例的序列，然后你想根据某个特定的字段比如 date 来分组迭代访问。
解决方案：
    itertools.groupby() 函数对于这样的数据分组操作非常实用。
"""

from itertools import groupby
from operator import itemgetter


def use_group_by():
    records = [
        {"address": "杭州", "date": "2018-05-04"},
        {"address": "硅谷", "date": "2018-05-04"},
        {"address": "长沙", "date": "2018-05-05"},
        {"address": "阳朔", "date": "2018-05-06"},
        {"address": "张家界", "date": "2018-05-05"},
        {"address": "鼓浪屿", "date": "2018-05-04"},
    ]

    # 先排序
    records.sort(key=itemgetter("date"))
    # 分组输出
    for date, items in groupby(records, key=itemgetter("date")):
        print(date)
        for item in items:
            print(" ", item)
    # 输出结果：
    """
    2018-05-04
      {'address': '杭州', 'date': '2018-05-04'}
      {'address': '硅谷', 'date': '2018-05-04'}
      {'address': '鼓浪屿', 'date': '2018-05-04'}
    2018-05-05
      {'address': '长沙', 'date': '2018-05-05'}
      {'address': '张家界', 'date': '2018-05-05'}
    2018-05-06
      {'address': '阳朔', 'date': '2018-05-06'}
    """


if __name__ == '__main__':
    use_group_by()
